package com.javaBasic;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

public class StreamDemo {


    public static void main(String[] args) {

        //  Arrays.asList 将数组转为List 但是得到的参数不是数组元素本身，而是数组对象，使用包装类型数组解决此问题
        // int [] arr = {1,2,3};
        // List num = Arrays.asList(arr);
        // System.out.println(num.get(1));

        // map 方法用于映射每个元素到对应的结果，以下代码片段使用 map 输出了元素对应的平方数，并去重！！！
        // .distinct() 去重

        List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
        System.out.println(numbers);
        List<Integer> squaresList = numbers.stream()
                .map( i -> i*i).distinct()
                .collect(Collectors.toList());
        System.out.println(squaresList);

        // // Stream 提供了新的方法 'forEach' 来迭代流中的每个数据。以下代码片段使用 forEach 输出了10个随机数：
        // Random random = new Random();
        // random.ints().limit(10).forEach(System.out::println);

        // // stream() 为集合创建串行流，Collectors将流转换成集合和聚合元素，可用于返回列表或字符串：
        // // filter 方法用于通过设置的条件过滤出元素。.fileter((过滤元素)->{return 过滤条件;}) 简写：.fileter(过滤元素->过滤条件)
        // List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
        // // 以List输出
        // List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
        // System.out.println("筛选列表: " + filtered);
        // // 以字符串输出并用 ，连接
        // String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
        // System.out.println("合并字符串: " + mergedString);
    }

}
